/**
 * 模式匹配类
 * 
 * @author 杨满球（本地）
 * 
 *         实现对两个字符串进行模式匹配，同时可获得对比的次数以及匹配的位置
 */
class PatternMatching {

	private String s;// 主串
	private String t;// 子串
	private int bfCount;// 对比次数
	private int index;// 匹配位置

	/**
	 * 构造方法
	 * 
	 * @param s
	 *            主串
	 * @param t
	 *            子串
	 * @throws Exception
	 *             子串过长或者两者为空
	 */
	public PatternMatching(String s, String t) throws Exception {
		if (s.length() < t.length() || s == null || t == null) {
			throw new Exception("Illegal parameter!");
		}
		this.s = s;
		this.t = t;
		this.bfCount = 0;
		this.contrast();
	}

	/**
	 * 将子串与主串进行比对
	 */
	private void contrast() {
		int slen = s.length();
		int tlen = t.length();
		int i = 0, j = 0;
		while (i < slen && j < tlen) {
			this.bfCount++;
			if (s.charAt(i) == t.charAt(j)) {
				i++;
				j++;
			} else {
				i = i - j + 1;
				j = 0;
			}
		}
		if (j >= tlen) {
			this.index = i - tlen;
		} else {
			this.index = -1;
		}
	}

	/**
	 * 获得比对的次数
	 * 
	 * @return 比对的次数
	 */
	public int getBfCount() {
		return bfCount;
	}

	/**
	 * 获得匹配的位置
	 * 
	 * @return 匹配的位置
	 */
	public int getIndex() {
		return index;
	}

}
